package mytest

import (
	"fmt"
)

func TestArray() {
	fmt.Println("TestArray-----------------------")
	var a [10]int = [10]int{1, 2, 3, 4}
	for index, value := range a {
		fmt.Printf("a[%d]=%d,", index, value)
	}
	fmt.Println("")

	a1 := a[1:3]
	fmt.Println(a1)

	a1[1] = 99
	fmt.Println(a)
	fmt.Println(a1)

	var arr = new([2]int)
	arr[0] = 1
	arr[1] = 2

	var arr2 [2]int
	arr2[0] = 1
	arr2[1] = 2

	modifyArr(arr2)
	fmt.Println(arr2)

	// 默念：数组有长度，切片没长度，数组有长度，切片没长度......
	var arr3 = [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	var slice1 = arr3[0:3]
	fmt.Println(slice1)

	var slice2 = []int{10, 11, 12, 13, 14}
	fmt.Println(slice2)

	var slice3 = make([]int, 10)
	fmt.Println(slice3)

	s1 := []int{1, 2, 3}
	fmt.Println(len(s1), cap(s1), s1) // 输出 3 3 [1 2 3]
	s2 := s1[1:]
	fmt.Println(len(s2), cap(s2), s2) // 输出 2 2 [2 3]
	for i := range s2 {
		s2[i] += 20
	}
	// s2的修改会影响到数组数据，s1输出新数据
	fmt.Println(s1) // 输出 [1 22 23]
	fmt.Println(s2) // 输出 [22 23]

	s2 = append(s2, 4) // append  导致了slice 扩容

	for i := range s2 {
		s2[i] += 10
	}
	// s1 的数据现在是陈旧的老数据，而s2是新数据，他们的底层数组已经不是同一个了。
	fmt.Println(s1) // 输出[1 22 23]
	fmt.Println(s2) // 输出[32 33 14]

}

func modifyArr(arr [2]int) {
	arr[1] = 3
}
